<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Title</title>
</head>
<body>

</body>
<script>
	{
		// 对象进行遍历for in:还会遍历原型
		// const arr = [10,20,30];
		// Array.prototype.username = "zhangpeiyue";
		// for(let key in arr){
		// 	console.log(key,arr[key]);// 可以输出username zhangpeiyue
		// }
	}
	
	
	{
		// const arr = [1,2,3];
		// console.log(Object.getOwnPropertyNames(arr));// 可以获取其私有属性
		// Object.getOwnPropertyNames(arr).forEach(key=>{
		// 	console.log(key,arr[key])
		// })
	}
	{
		// const obj = {
		// 	a:1,
		// 	b:2,
		// 	c:3,
		// 	[Symbol("abc")]:100
		// };
		// for(let key in obj){
		// 	console.log(key,obj[key]);
		// }
		
		// const arr = [10,20,30,Symbol("abc")];
		// for(let key in arr){
		// 	console.log(key,arr[key])
		// }
	}
	{
		// 解决无法对Symbol进行枚举的方法
		// const obj = {
		// 	a:1,
		// 	b:2,
		// 	c:3,
		// 	[Symbol("abc")]:100
		// };
		// const arr = Object.getOwnPropertySymbols(obj);
		// const arr2 = Object.getOwnPropertyNames(obj);
		// console.log(arr,arr2);
		
		// console.log([...Object.getOwnPropertySymbols(obj),...Object.getOwnPropertyNames(obj)])
		
	}
	{
		// const obj = {
		// 	a:1,
		// 	b:2,
		// 	c:3,
		// 	[Symbol("abc")]:100
		// };
		// Reflect.ownKeys(obj).forEach(key=>{
		// 	console.log(key,obj[key]);
		// });
	}
	{
		// 封装方法
		const obj = {
			a:1,
			b:2,
			c:3,
			[Symbol("abc")]:100
		};
		const ownEach = function(targetObj,callback){
			if(typeof targetObj !== "object") throw new TypeError("targetObj is not a object");
			if(typeof callback !== "function") throw new TypeError("callback is not a function");
			Reflect.ownKeys(targetObj).forEach(key=>{
				callback(targetObj[key],key)
			})
		}
		ownEach(obj,(value,key)=>{
			console.log(key,value);
		})
	}
	
	
	
</script>
</html>